package com.probiz.estore.customer.service;

import java.util.List;

import com.probiz.estore.common.model.customer.Consult;
import com.probiz.estore.core.search.SearchCriteria;
import com.probiz.estore.core.service.GenericManager;
import com.probiz.estore.customer.model.ConsultSearchCriteria;

/**
 * Manager interface for Consult, responsible for business processing, and communicate between web and persistence layer.
 *
 */
public interface ConsultManager extends GenericManager<Consult> {
	/**
	 * 完全删除函数(咨询或回复)
	 * @param consult
	 */
	public void deleteFully(Consult consult);
	
	 /**
	 * 新增回复
	 * @param reply
	 */
	public void addReply(Consult reply);
	
	/**
	 * 新增评论
	 * @param consult
	 */
	public void addConsult(Consult consult);
	
	/**
	 * 搜索咨询
	 * @param consultSearchCriteria
	 * @param searchCriteria
	 * @return
	 */
	public List<Consult> searchByCriteria(ConsultSearchCriteria consultSearchCriteria, SearchCriteria searchCriteria);
	
	/**
     * 搜索，从GenericController借鉴过来。防止翻页过钱
     *
     * @param consultSearchCriteria 自定义搜索条件
     * @param searchCriteria        分页搜索条件
     * @return 搜索结果
     */
    public List<Consult> searchByCriteriaForController(ConsultSearchCriteria consultSearchCriteria, SearchCriteria searchCriteria);
    /**
     * 标识为已阅
     * @param consult
     */
    public void doMarkRead(Consult consult);
    
    /**
     * 标识为未阅
     * @param consult
     */
    public void doMarkUnRead(Consult consult);
    
    /**
     * 标识为可见
     * @param consult
     */
    public void doMarkShow(Consult consult);
    
    /**
     * 标识为不可见
     * @param consult
     */
    public void doMarkUnShow(Consult consult);
    
   
	
	/**
	 * 更新评论的回复数量
	 * 
	 * @param consult  
	 * @param replyCount  要改变的数量，可正可负
	 * @param onShowReplyCount  要改变的激活数量，可正可负
	 */
	public void updateConsultReplyCount(Consult consult,Integer replyCount, Integer onShowReplyCount);
	/**
	 * 获得商品的可见咨询个数
	 * @param productId
	 * @return
	 */
	public Long getOnShowConsultCountByProductId(Integer productId);
	/**
	 * 获得咨询的所有可见回复
	 * @param consultId
	 * @return
	 */
	public List<Consult> getOnShowReplyListByConsultId(Integer consultId);
	/**
	 * 获得“我发表的咨询” 的个数
	 * @param customerId
	 * @return 
	 */
	public Integer[] getCountsOfCustomer(Integer customerId);
	
	/**
	 * 获得平台总咨询数量
	 * @return
	 */
	public Long countConsultTotal();
	/**
	 * 获取平台未回复的咨询数
	 * @return
	 */
	public Long countUnreplyConsultTotal();
	
}
